<%@page import="archivos.BorrarDirectorio"%>
<%@page import="archivos.Txt"%>
<%@page import="analisis.GoGanpa"%>
<%@page import="archivos.Sif"%>
<%@page import="graphs.GraphADT"%>
<%@page import="utils.OS"%>
<%@page import="org.apache.commons.fileupload.FileUploadException"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="java.io.File"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
    <head>
        <%@include file="../disenoWeb/title.html" %>
        <meta charset="utf-8">
        <%@include file="../disenoWeb/head.html" %>

        <script src="../disenoWeb/js/formulario.js" type="text/javascript"></script>


    </head>
    <body id="page2" >
        <div class="extra">
            <!--==============================header=================================-->
            <header>
                <%@include file="../disenoWeb/divHeader.jsp" %>
                <div class="menu-row">
                    <div class="menu-bg">
                        <div class="main">
                            <nav class="indent-left">
                                <ul class="menu wrapper">
                                    <%@include file="menuGoganpa.html" %>
                                </ul>
                            </nav>
                        </div>
                    </div>
                </div>
                <div class="row-bot">
                    <div class="center-shadow">
                    </div>
                </div>
            </header>

            <!--==============================content================================-->
            <section id="content">
                <div class="content-bg">
                    <div class="main">
                        <%                /*Se inicializan varias variables*/
                            String nombreFichero = "null";//Fichero de la lista de genes (.txt)
                            String separator = OS.getDirectorySeparator();
                            String sesion = session.getId();//Identificador de session
                            String red = "";
                            File file = null;

                            String ubicacionDatos = application.getRealPath(separator
                                    + "WEB-INF" + separator + "datos" + separator + "orgGO.txt");
                            File datos = new File(ubicacionDatos);

                            //----------------------------------------------------------
                            /*Se crea una nueva carpeta dedicada a este apartado, llamda "enrichNet". Dentro de esta carpeta
                             se crearan carpetas por usuario mediante el identificador de session*/
                            String ubicacionEnrichNet = application.getRealPath(separator
                                    + "WEB-INF" + separator + "datos" + separator + "goganpa");
                            File directorio = new File(ubicacionEnrichNet);

                            /*Si no existe la carpeta "Enrich" se crea*/
                            if (!directorio.exists()) {
                                directorio.mkdir();
                            }

                            //----------------------------------------------------------
                            /*Se crea una carpeta mediante el identificador de session*/
                            String ubicacionUsuario = ubicacionEnrichNet + separator + sesion;
                            File directorioUsuario = new File(ubicacionUsuario);

                            /*Si no existe la carpeta "Enrich" se crea*/
                            if (!directorioUsuario.exists()) {
                                directorioUsuario.mkdir();
                            }

                            //----------------------------------------------------------
                            /*Comienza el proceso de subir los archivos indicados por el usuario a la
                             carpeta que se ha creado anteriormente para ello*/
                            DiskFileItemFactory factory = new DiskFileItemFactory();
                            factory.setSizeThreshold(1024);
                            factory.setRepository(directorioUsuario);

                            ServletFileUpload upload = new ServletFileUpload(factory);

                            try {
                                List<FileItem> partes = upload.parseRequest(request);

                                int cont = -1;
                                for (FileItem item : partes) {
                                    cont++;
                                    if (item.getFieldName().equals("file1_goganpa")) {
                                        if (item.getName().equals("") == false) {
                                            file = new File(directorioUsuario, item.getName());
                                            item.write(file);

                                            /*Se obtiene el fichero .txt*/
                                            if (cont == 0) {
                                                nombreFichero = directorioUsuario + separator + item.getName();
                                                red = item.getName().substring(0, item.getName().length() - 4);

                                            }
                                            if (!file.getPath().endsWith(".txt")) {
                                                file.delete();
                                                String error = "Si";
                                                session.setAttribute("error", error);
                                                directorioUsuario.delete();

                                            }

                                        }
                                    }

                                }

                                if (session.getAttribute("error") == null) {

                                    String orgElegido = (String) session.getAttribute("orgGO");//Organismo Elegido para Goganpa
                                    String organismo = Txt.orgGoganpa(orgElegido, datos);
                                    String ont = (String) session.getAttribute("ontology"); //Ontologia para Goganpa
                                    String measure = (String) session.getAttribute("medida");//Medida para Goganpa
                                    String combine = (String) session.getAttribute("combine");//Combine para Goganpa
                                    String rho = (String) session.getAttribute("nivelGO");//Umbral para Goganpa
                                    session.setAttribute("goganpaRed", red);

                                    /*Se coloca una variable en session llamada "muestra" para saber luego en la tabla
                                     que se debe de mostrar*/
                                    String opcionElegida = "goganpa";
                                    session.setAttribute("opcionElegida", opcionElegida);

                                    //Se hace una llamda al metodo que crea el script de R y lo ejecuta
                                    GoGanpa.generarScript(nombreFichero, ont, measure, organismo, combine, rho, ubicacionUsuario, red);
                                    File sif = new File(ubicacionUsuario + separator + red + ".sif");
                                    GraphADT grafoUser = Sif.leeSIF(sif);
                                    if (grafoUser.getNumVertices() > 0) {
                                        List<String> genes = Txt.listaGenes(file);
                                        session.setAttribute("genes", genes);
                                        session.setAttribute("grafoUser", grafoUser);

                                        BorrarDirectorio.borrarDirectorio(directorioUsuario);
                                        directorioUsuario.delete();

                                    } else {
                                        file.delete();
                                        String error = "Si";
                                        session.setAttribute("error", error);
                                        BorrarDirectorio.borrarDirectorio(directorioUsuario);
                                        directorioUsuario.delete();
                                    }
                        %>



                        <%        }
                            if (session.getAttribute("error") != null) {
                        %><form action="../goganpa/formGoganpa.jsp" id="error" ></form>
                        <script>submitFormulario();</script>                                                      
                        <%
                        } else {
                        %><jsp:forward page="../goganpa/viewGoganpa.jsp"/><%
                                }
                            } catch (FileUploadException ex) {
                                out.write("Error al subir archivo " + ex.getMessage());
                            }
                        %>
                    </div>
                    <div class="block"></div>
                </div>
            </section>
        </div>

        <!--==============================footer=================================-->
        <footer>
            <%@include file="../disenoWeb/footer.html" %>
        </footer>
        <script type="text/javascript"> Cufon.now();</script>
    </body>
</html>
